時間飛快,居然堅持到第三十天了!結果我才吃完「上層麵包」。最後一天要寫什麼呢?原本想逞強,但如果囫圇吞棗,寫出自己看不懂的也沒意義。於是回顧前面29天,從中挑出想要加強的地方。發現自己常常程式碼寫範例時,尤其在使用宣告變數用的var
、let
、const
時,常常搞不清楚誰是誰跟使用時機,撰寫時跳來跳去一下用var
一下用let
,造成版面不一致實感抱歉。謝謝包容。
然而作者在書中範例程式碼裡幾乎是用var
。但不是說var
容易造成語法混肴,最好不要用了嗎?為什麼在書中範例還是使用呢?後來有解惑,雖然實際產品開發時少用var
,但是又不能忘記它,要使用在哪呢?於是大多用於教學影片或書中範例程式碼中能看見它。開始與結束有始有終(當然不是真的終點),最後一天回歸初心,複習複習囉!
const
、let
(P3-26)var
在ES6前就有了。但缺點是,由於使用範疇問題,程式碼在撰寫後如要除錯過程會不便利。const
、let
是為了避免變數被修改或覆蓋,為了解決只用var
撰寫程式碼的缺點,在ES6後出現的兩個新的變數宣告關鍵字,也是目前實際產品開發中最常用到的兩個語法。const
就用const
、其次let
、最後var
。let
和var
類似,與var
不同的就是宣告變數的範疇、以及不能被重複宣告。var
是函式範疇,而let
是區塊範疇。由於let
具有區塊範疇,因此在區塊外取得不到name
的變數“Ann”。(但為何是印出"Hello CodePen"。我得想一下。)
由於var
具有函式範疇,因此在區塊外也能取得name
的變數“Ann”。
使用var
缺點,會有結果不明確的狀況,因此實際開發時少用。譬如當在全域宣告一個變數i
,並在後面使用for
迴圈,for
迴圈裡也用了另一個新宣告的i
,但會發現在for
條件判斷用的i
在迴圈進行時也對外面的全域變數i
進行修改。最後,全域外面變數i
的內容就跟著變成10(預期是0)。
如果使用const
、let
這個問題就能避免。
const
、let
的範疇是相同的。但與let
不同的是,在JavaScript中,const
用來聲明常數變數,即一旦賦值後不能再被重新賦值。如果嘗試對const
變數進行重新賦值,就會引發錯誤。const
限制的是變數的綁定,而不是物件的內容。可以修改物件或陣列的內容,但不能重新賦值整個變數。